for (let i = 0; i < nMonitors; i++)
this.monitors.push(screen.get_monitor_geometry(i));
- this.primaryIndex = screen.get_primary_monitor();
+ if (nMonitors == 1) {
+ this.primaryIndex = this.bottomIndex = 0;
+ } else {
+ // If there are monitors below the primary, then we need
+ // to split primary from bottom.
+ this.primaryIndex = this.bottomIndex = screen.get_primary_monitor();
+ for (let i = 0; i < this.monitors.length; i++) {
+ let monitor = this.monitors[i];
+ if (this._isAboveOrBelowPrimary(monitor)) {
+ if (monitor.y > this.monitors[this.bottomIndex].y)
+ this.bottomIndex = i;
+ }
+ }
+ }
this.primaryMonitor = this.monitors[this.primaryIndex];
+ this.bottomMonitor = this.monitors[this.bottomIndex];
},
_updateHotCorners: function() {
this.emit('monitors-changed');
},
+ _isAboveOrBelowPrimary: function(monitor) {
+ let primary = this.monitors[this.primaryIndex];
+ let monitorLeft = monitor.x, monitorRight = monitor.x + monitor.width;
+ let primaryLeft = primary.x, primaryRight = primary.x + primary.width;
+
+ if ((monitorLeft >= primaryLeft && monitorLeft <= primaryRight) ||
+ (monitorRight >= primaryLeft && monitorRight <= primaryRight) ||
+ (primaryLeft >= monitorLeft && primaryLeft <= monitorRight) ||
+ (primaryRight >= monitorLeft && primaryRight <= monitorRight))
+ return true;
+
+ return false;
+ },
+
get focusIndex() {
let screen = global.screen;
let display = screen.get_display();
},
_setSizePosition: function() {
- let primary = Main.layoutManager.primaryMonitor;
- this.actor.x = primary.x;
- this.actor.y = primary.y + primary.height - 1;
- this.actor.width = primary.width;
+ let monitor = Main.layoutManager.bottomMonitor;
+ this.actor.x = monitor.x;
+ this.actor.y = monitor.y + monitor.height - 1;
+ this.actor.width = monitor.width;
this._notificationBin.x = 0;
- this._notificationBin.width = primary.width;
+ this._notificationBin.width = monitor.width;
this._summaryBin.x = 0;
- this._summaryBin.width = primary.width;
+ this._summaryBin.width = monitor.width;
if (this._pointerBarrier)
global.destroy_pointer_barrier(this._pointerBarrier);
this._pointerBarrier =
- global.create_pointer_barrier(primary.x + primary.width, primary.y + primary.height - this.actor.height,
- primary.x + primary.width, primary.y + primary.height,
+ global.create_pointer_barrier(monitor.x + monitor.width, monitor.y + monitor.height - this.actor.height,
+ monitor.x + monitor.width, monitor.y + monitor.height,
4 /* BarrierNegativeX */);
},
_showTray: function() {
- let primary = Main.layoutManager.primaryMonitor;
+ let monitor = Main.layoutManager.bottomMonitor;
this._tween(this.actor, '_trayState', State.SHOWN,
- { y: primary.y + primary.height - this.actor.height,
+ { y: monitor.y + monitor.height - this.actor.height,
time: ANIMATION_TIME,
transition: 'easeOutQuad'
});
},
_hideTray: function() {
- let primary = Main.layoutManager.primaryMonitor;
+ let monitor = Main.layoutManager.bottomMonitor;
this._tween(this.actor, '_trayState', State.HIDDEN,
- { y: primary.y + primary.height - 1,
+ { y: monitor.y + monitor.height - 1,
time: ANIMATION_TIME,
transition: 'easeOutQuad'
});